// a voir placer ici le style overflow hidden /auto suivant parametre
//================
function Container(oHtml, mode)
//================
// oHtml : objet Html utilis? comme container
//         (null si le container est aussi une instance de CadreFenetre;
//          une Div arbitraire est alors cr??e qui sera remplac? par appel de setContainerHtml lorque l objet 3D sera cr??
//          cette cr?ation est elle utile (? revoir))
// mode : gestion de l 'affichage du contenu  (null si le container n est pas une fenetre cf CadreFenetre.placeIn)
//      scroll : barre de scroll automatique
//      masque : taille fix?e , pas de scroll
//      expand : expansion en fonction du contenu


{
this.defMode = 'masque';
//this.defMode = 'scroll';
//this.defMode = 'expand';  mode ? revoir
this.mode = this.mode || this.defMode;

this.bPseudoTailleMax = true;

this.idContainer = ++Container.prototype.nbInstances;

this.setContainerHtml(oHtml, oHtml ? 'nonFen' : mode);

this.managementMode = 'win';
this.barreOnglets = null;
this.bOptMSheetMode = true;
this.ctrlFenFi = null;



}

Container.prototype.nbInstances = 0;

Container.prototype =  {
          heightMinContainer      : function() {
                                    if (this.mode == 'AutoScroll') 
                                        return this.oScroll.heightMin();
                                  },

          setContainerHtml        : function (oHtml,mode,optionsMode){                 // fixe (ou modifie) l'elt Html remplissant la fct? de
                                                                              // cadre-container
                                      if (!oHtml){     // utilisation comme super-class
                                        this.containerHtml = document.createElement('DIV');
                                      }
                                      else {
                                        if (mode == 'AutoScroll')
                                         {
//                                            oHtml.style.height = '100%';
//                                            oHtml.style.width = '100%';

var w= oHtml.offsetWidth;
var h =oHtml.offsetHeight;

                                              this.oScroll = new ContainerAutoScroll(oHtml,null,
                                                                  w,h,optionsMode);
// autre possibilit? (mais n'apporte rien puisque si la div ds laquelle s'inscrit le container change de dimension
// il faut de toute fa?on recalculer les ?lts internes, le traitement automatique du navigateur
// ne suffit donc pas; par ex pour CadreFenetre avec resize comportReDimFen appelle modDimContainer qui s'en charge) :
// le seul interet serait pour l'utilisation de la fct? ReSize pr?d?finie coupl?e ? modDImContainer mais quid de FFox?
//    this.oScroll = new ContainerAutoScroll(oHtml,null,"100%","100%",optionsMode);
                                              //this.oScroll.base = this;

//                                            this.oScroll.placeIn(this.containerHtml,0,0);
//                                            this.extBase = ContainerAutoScroll;
//                                            this.extBase();
                                        }

                                        this.containerHtml = oHtml;
                                      }
                                      this.containerHtml.oContainer = this;

                                      traceExec('mode= '+mode,76);
                                      if (mode != 'nonFen') {   // type fenetre  (sinon on ne modifie pas le className )
                                         // a revoir a parametrer :
                                        this.mode = mode || this.defMode;
                                        traceExec('setContainerHtml this.mode= '+this.mode,76);
                                        this.setModeDisplayContains();
                                        traceExec('setContainerHtml 1 this.containerHtml.className= '+this.containerHtml.className,76);
                                      }
                                        traceExec('setContainerHtml2 this.containerHtml.className= '+this.containerHtml.className,76);
                                    },

          setModeDisplayContains    : function (mode){
                                        if (mode)
                                          this.mode = mode;
                                        var etat = this.containerHtml.className.replace(/^[^\s]*/g,'');      // actif ou inactif
                                        this.containerHtml.className = 'container_'+ this.mode + etat;
                                        traceExec('->'+this.containerHtml.className+']',25);
                                        traceExec('setModeDisplayContains  this.containerHtml.className=  '+ this.containerHtml.className,76);
                                      },

          setMSheetMode           : function (posTabs){
                                    // assure une gestion de pages par onglets
                                      // //traceAct('setMSheetMode entree this= ',this.idContainer);
                                       if (this.managementMode == 'sheet') return;
                                       this.managementMode = 'sheet';

                                       this.ctrlFenFi.setManagtMode('sheet');

                                       ////traceAct('setMSheetMode sortie');
                                    },

          setMWinMode              : function (){
                                     // assure une gestion de fenetres
                                     ////traceAct('setMWinMode entree');
                                     if (this.managementMode == 'win') return;
                                     this.managementMode = 'win';

                                     this.ctrlFenFi.setManagtMode('win');
                                     ////traceAct('setMWinMode sortie');
                                   },

          setDimContainer    : function (height,width) {
                                       if (this.mode == 'AutoScroll') {
     //                                          this.oScroll.setDim ( (window.getComputedStyle ? width : null), height);
                                          this.oScroll.setDim ( width, height);
                                                                    
                                        }
                                       else{
                                          this.containerHtml.style.height = height;
                                       }
                                  },
          modDimContainer    : function (deltaH,deltaW) {
                                       if (this.mode == 'AutoScroll') {
                                          this.oScroll.modDim(deltaW,deltaH);

                                          //this.containerHtml.style.height = this.containerHtml.style.height;
                                       }
                                       else   {
                                          this.containerHtml.style.height = parseInt(this.containerHtml.style.height) + deltaH;
                                          }
                                  },
/*fillAndDisplayBuff    : function(doct,noBuff,bClone) {
                                       if (this.mode == 'AutoScroll') {
                                           if (noB != this.noCurrentBuff) {
                                                this.saveContains(effact=true);
                                                this.noCurrentBuff = noB;
                                            }
                                            this.fill(doct,save=false,bClone);
                                       }
          },
          
          createBuff        : function() {
                                       if (this.mode == 'AutoScroll') {
                                          this.oScroll.createBuff();
                                       }
          },
*/
          fill              : function (eltHtml, bSaveOldContains,bClone) {
                                        // svgde du contenu affich? + supp affichage
                                        if (     bSaveOldContains
                                            &&  (!this.isEmpty())){
                                            // svgde
                                            this.saveContains(bClear=true);
                                        }
                                        //supp tout elt de l affichage
                                        else
                                            this.clear(bConserveEltsScroll=true);
                                            
                                        //affichage nvl elt 
                                        if (eltHtml) 
                                            this.add(eltHtml,bClone);    

                                        return eltHtml;  // modif pour print
          },
                                  
          isEmpty               : function () {
                                    if (this.mode == 'AutoScroll') 
                                        return this.oScroll.isEmpty();
                                    else
                                        return !this.firstChild;  // ? tester
                                  },
                                  
          saveContains            : function (bClear) {
                                      //  if (!this.isEmpty()){
                                            if (this.mode == 'AutoScroll'){
                                                this.oScroll.saveCurrentBuffer(bClear);
                                            }
                                      //  }
                                },
                                  
          restoreContains            : function (idContains,bSave) {
                                           if (this.mode == 'AutoScroll'){
                                                this.oScroll.restoreBuffer(idContains,bSave);
                                            }
                                    
                                },

          nextBuff            : function () {
                                           if (this.mode == 'AutoScroll'){
                                                this.oScroll.nextBuff();
                                            }
                                    
                                },

         prevBuff            : function () {
                                           if (this.mode == 'AutoScroll'){
                                                this.oScroll.prevBuff();
                                            }
                                    
                                },
            getHtmlCont           : function () {
            						return this.containerHtml;
            },
            
            add                   : function (elt,bClone){
                                       if (!elt) {
                                           window.status = 'demande d\'incorporation d\'un ?l?ment non pr?cis? : pas d\'action';
                                           return -1;
                                       }
                                       
                                       if (this.mode == 'AutoScroll') {
                                         this.oScroll.add(elt,bClone);
                                       }
                                       else {
                                         if (this.filleTailleMax)                      // place du code ? revoir
                                           this.svgZoneCentrale.appendChild(elt)
                                         else {
                       						//old code before rialto 
                       						// this.containerHtml.appendChild(elt);

											// new code narrow rialto.widget.AbstractContainer
										    var comp, oHtml;
										    //-- Rialto-component
										    if (elt.bRiaComp) {
										    	comp  = elt;
										    	oHtml = elt.getHtmlExt();
										    }	
										    //-- obj Html element of Rialto-component
										    else
										    if (elt.oRia || elt.oCiu) {
										    	comp  = elt.oRia || elt.oCiu;
										    	oHtml = elt;
										    }
										    //-- obj Html independent
										    else {
										    	comp = oHtml = elt;
										    }
										    
										 //   this.tabObjContained.push(comp);
										 	if (comp != oHtml) // for IE if elt = document.createTextNode (cf cadreFenetre 268)
										    	//comp.inContainer = this;	// reverse link
										    	this.record(comp);
										    
										    // Html layout
										    this.getHtmlCont().appendChild(oHtml);

                                         }
                                       }
                                       //This method is to call after the component is add to the document
									    if (comp.afterPlaceIn) {
									    	comp.afterPlaceIn();
									    }
                                       ////traceAct('Container.add sortie');
                                   },
                                   
	    	//MODIF CYRIL POUR COMPORTEMENT HOMOGENE (chaine resize,remove,adapt..)
		  record 				   : function (oRia) {

									// record (in container) references to elements in container
										if (!this.arrChild) 
											this.arrChild = new Array;		
										this.arrChild.push(oRia);
									    oRia.inContainer = this;	// reverse link
									},                                   
                                   
          clear                    : function (bConserveEltsIU) {
                                     // a revoir pour r?aliser des close sur les objets internes
                                        if (!this.isEmpty()){
                                            if (this.mode == 'AutoScroll'){
                                                this.oScroll.clear(bConserveEltsIU);
                                            }
                                        }
                                    },

          addTabsPane              : function (tabsPane,posTabs){
                                                 this.barreOnglets = tabsPane;
                                                 // prevoir la possibilite de placer la barre d onglet en bas cf posTabs
                                                 this.containerHtml.insertBefore(tabsPane.html,this.containerHtml.firstChild);
                                     },
          delTabsPane              : function (){
                                                  this.containerHtml.removeChild(this.barreOnglets.html);
                                                  this.barreOnglets = null;
                                     },

          replaceContainsBy        : function (nvContenu){
                                     // ? revoir limitatif
                                               this.containerHtml.firstChild.nodeValue = nvContenu;
                                     },

          nbElts                   : function (){
                                                 return this.ctrlFenFi.length();
                                     }
                                     ,

          eltActif                  : function () {
                                                return this.ctrlFenFi.top()
                                     }
                                     ,

          abandonModePPEtRes       : function (sansActivation){
                                     // appell?e par onFocus -> display  avec fen.container.fillePseudoTailleMax
                                     // Cette routine est surcharg?e ds CadreFenetre  elle traite alors d'autres cas de figure
                                     // Dans cette version pour Container  elle traite uniquement le cas ou fillePseudoTailleMax = true
                                     // en effet une fen  ne peut etre en mode PP-confondu  avec son container
                                     // s'il n'est pas de type CadreFenetre : elle est donc alors de type PP fillePseudoTailleMax
                              traceExec('abandonModePPEtRes vers Container  entree container= '+this.titreFenetre,31);

                                     traceExec('abandonModePPEtMin fillePseudoTailleMax -> svgFenFille.suppAjustDimDynExt()',31);
                                     this.svgFenFille.suppAjustDimDynExt();
                                     this.svgFenFille.restoreSize(sansActivation);  // r?tabli le dernier ?tat diff?rent de max et min
                             traceExec('abandonModePPEtRes vers Container sortie',31);
                              }

}